package com.star.mentor.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.star.mentor.dto.MentorPageDTO;
import com.star.mentor.dto.MentorSaveDTO;
import com.star.mentor.dto.MentorUpdateWxmentorDTO;
import com.star.mentor.entity.Mentor;
import com.star.mentor.vo.MentorPageVO;

import java.util.List;

/**
 * 导师 服务类
 *
 * @author yangzj
 */
public interface MentorService extends IService<Mentor> {


    /**
     * 获取邀请码
     *
     * @return {@link String}
     */
    String getInvitationCode();

    /**
     * 保存
     *
     * @param dto 入参
     */
    void save(MentorSaveDTO dto);

    /**
     * 更新启用
     *
     * @param id      ID
     * @param enabled 启用
     */
    void updateEnabled(Long id, boolean enabled);

    /**
     * 延长邀请码有效时间
     *
     * @param invitationExpire 邀请过期
     * @param id               ID
     */
    void updateInvitationExpire(Long id, Integer invitationExpire);

    /**
     * 删除通过ID
     *
     * @param id ID
     */
    void deleteById(Long id);

    /**
     * 分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link MentorPageVO}>
     */
    IPage<MentorPageVO> page(MentorPageDTO dto);

    /**
     * 获取通过用户ID
     *
     * @param userId 用户ID
     * @return {@link Mentor}
     */
    Mentor getByUserId(Long userId);

    /**
     * 验证邀请码
     *
     * @param invitationCode 邀请代码
     * @return {@link Long}
     */
    Long validateWxmentor(String invitationCode);

    /**
     * 更新-微信小程序（导师端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    void updateWxmentor(MentorUpdateWxmentorDTO dto, Long userId);

    /**
     * 已绑定用户且已启用的导师列表
     *
     * @return {@link List}<{@link Mentor}>
     */
    List<Mentor> listEnabled();
}
